Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / android / app / src / main / java / com / meshchatx / TelephoneNativeAudioSession.java

Displaying Raw • Download


android/app/src/main/java/com/meshchatx/TelephoneNativeAudioSession.java 6e10b7c45787d0be4c4a9e17622aeb5f4a888287 (6e10b7c4) Text, 17.47 KB

Tff7b72package T7ee787com.meshchatxTb4b4b4;

Tff7b72import T7ee787android.ManifestTb4b4b4;
Tff7b72import T7ee787android.content.ContextTb4b4b4;
Tff7b72import T7ee787android.content.pm.PackageManagerTb4b4b4;
Tff7b72import T7ee787android.media.AudioAttributesTb4b4b4;
Tff7b72import T7ee787android.media.AudioFocusRequestTb4b4b4;
Tff7b72import T7ee787android.media.AudioFormatTb4b4b4;
Tff7b72import T7ee787android.media.AudioManagerTb4b4b4;
Tff7b72import T7ee787android.media.AudioRecordTb4b4b4;
Tff7b72import T7ee787android.media.AudioTrackTb4b4b4;
Tff7b72import T7ee787android.media.MediaRecorderTb4b4b4;
Tff7b72import T7ee787android.os.BuildTb4b4b4;
Tff7b72import T7ee787android.text.TextUtilsTb4b4b4;
Tff7b72import T7ee787android.webkit.CookieManagerTb4b4b4;
Tff7b72import T7ee787android.webkit.WebViewTb4b4b4;

Tff7b72import T7ee787androidx.annotation.NullableTb4b4b4;
Tff7b72import T7ee787androidx.core.content.ContextCompatTb4b4b4;

Tff7b72import T7ee787org.json.JSONObjectTb4b4b4;

Tff7b72import T7ee787java.util.concurrent.atomic.AtomicBooleanTb4b4b4;

Tff7b72import T7ee787okhttp3.RequestTb4b4b4;
Tff7b72import T7ee787okhttp3.ResponseTb4b4b4;
Tff7b72import T7ee787okhttp3.WebSocketTb4b4b4;
Tff7b72import T7ee787okhttp3.WebSocketListenerTb4b4b4;
Tff7b72import T7ee787okio.ByteStringTb4b4b4;

T8b949e/**
* Native mic send + speaker receive for {@code /ws/telephone/audio} (same protocol as the web
* audio bridge). Do not use on the UI thread for {@link #start()} other than the initial schedule.
*/
Tff7b72public Tff7b72final Tff7b72class T56d364TelephoneNativeAudioSession Tb4b4b4{
Tff7b72public Tff7b72static Tff7b72final Tffa657int Te6edf3SAMPLE_RATE Tff7b72= T79c0ff48000Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3IN_CHANNEL Tff7b72= Te6edf3AudioFormatTb4b4b4.Te6edf3CHANNEL_IN_MONOTb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3OUT_CHANNEL Tff7b72= Te6edf3AudioFormatTb4b4b4.Te6edf3CHANNEL_OUT_MONOTb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3FORMAT Tff7b72= Te6edf3AudioFormatTb4b4b4.Te6edf3ENCODING_PCM_16BITTb4b4b4;

Tff7b72private Tff7b72final Te6edf3Context Te6edf3appContextTb4b4b4;
Tff7b72private Tff7b72final Te6edf3AtomicBoolean Te6edf3running Tff7b72= Tff7b72new Te6edf3AtomicBooleanTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72private Tff7b72final Te6edf3AtomicBoolean Te6edf3pipelinesReady Tff7b72= Tff7b72new Te6edf3AtomicBooleanTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72private Tff7b72final Te6edf3MainActivity Te6edf3activityTb4b4b4;

Tf0883e@Nullable
Tff7b72private Te6edf3WebSocket Te6edf3webSocketTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3AudioRecord Te6edf3audioRecordTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3AudioTrack Te6edf3audioTrackTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3Thread Te6edf3sendThreadTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3Thread Te6edf3connectThreadTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3AudioManager Te6edf3audioManagerTb4b4b4;
Tf0883e@Nullable
Tff7b72private Te6edf3AudioFocusRequest Te6edf3audioFocusRequestTb4b4b4;
Tff7b72private Tff7b72final Te6edf3AudioManagerTb4b4b4.Te6edf3OnAudioFocusChangeListener Te6edf3audioFocusListener Tff7b72= Te6edf3focusChange Tff7b72-Tff7b72> Tb4b4b4{
Tb4b4b4}Tb4b4b4;

Tff7b72public Td2a8ffTelephoneNativeAudioSessionTb4b4b4(Te6edf3MainActivity Te6edf3activityTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activity Tff7b72= Te6edf3activityTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3appContext Tff7b72= Te6edf3activityTb4b4b4.Te6edf3getApplicationContextTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72public Tff7b72static Tffa657boolean Td2a8ffcanRunTb4b4b4(Te6edf3Context Te6edf3ctxTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3ctxTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4) Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3AudioRecordTb4b4b4.Te6edf3getMinBufferSizeTb4b4b4(Te6edf3SAMPLE_RATETb4b4b4, Te6edf3IN_CHANNELTb4b4b4, Te6edf3FORMATTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72public Tffa657boolean Td2a8ffisActiveTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3runningTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffstartTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3runningTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3connectThread Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3canRunTb4b4b4(Te6edf3appContextTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffno_record_audio_permissionTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3connectThread Tff7b72= Tff7b72new Te6edf3ThreadTb4b4b4(
Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3openWebSocketTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3connectThread Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffmeshchatx-tel-wsTa5d6ff"
Tb4b4b4)Tb4b4b4;
Te6edf3connectThreadTb4b4b4.Te6edf3setPriorityTb4b4b4(Te6edf3ThreadTb4b4b4.Te6edf3NORM_PRIORITYTb4b4b4)Tb4b4b4;
Te6edf3connectThreadTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffstopTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3runningTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3pipelinesReadyTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3webSocket Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3webSocketTb4b4b4.Te6edf3closeTb4b4b4(T79c0ff1000Tb4b4b4, Ta5d6ff"Ta5d6ffclient stopTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3webSocket Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3sendThread Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3sendThreadTb4b4b4.Te6edf3joinTb4b4b4(T79c0ff2000LTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3InterruptedException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3sendThread Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3releaseAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffpostReleaseAfterStopTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3sendThread Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72new Te6edf3ThreadTb4b4b4(
Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3sendThread Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3sendThreadTb4b4b4.Te6edf3joinTb4b4b4(T79c0ff2000LTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3InterruptedException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tb4b4b4}
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffmeshchatx-tel-cleanupTa5d6ff"
Tb4b4b4)Tb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@SuppressWarningsTb4b4b4(Ta5d6ff"Ta5d6ffWeakerAccessTa5d6ff"Tb4b4b4)
Tffa657void Td2a8ffonDestroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffopenWebSocketTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3String Te6edf3cookie Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3String Te6edf3c Tff7b72= Te6edf3CookieManagerTb4b4b4.Te6edf3getInstanceTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3getCookieTb4b4b4(Ta5d6ff"Ta5d6ffhttps://127.0.0.1:8000Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3TextUtilsTb4b4b4.Te6edf3isEmptyTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3cookie Tff7b72= Te6edf3cTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3runningTb4b4b4.Te6edf3setTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3pipelinesReadyTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3RequestTb4b4b4.Te6edf3Builder Te6edf3rb Tff7b72= Tff7b72new Te6edf3RequestTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3urlTb4b4b4(Ta5d6ff"Ta5d6ffwss://127.0.0.1:8000/ws/telephone/audioTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3TextUtilsTb4b4b4.Te6edf3isEmptyTb4b4b4(Te6edf3cookieTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3rbTb4b4b4.Te6edf3addHeaderTb4b4b4(Ta5d6ff"Ta5d6ffCookieTa5d6ff"Tb4b4b4, Te6edf3cookieTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3webSocket Tff7b72= Te6edf3LocalhostTrustOkHttpClientTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3newWebSocketTb4b4b4(
Te6edf3rbTb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72new Te6edf3WebSocketListenerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonOpenTb4b4b4(Te6edf3WebSocket Te6edf3wTb4b4b4, Te6edf3Response Te6edf3rTb4b4b4) Tb4b4b4{
Te6edf3wTb4b4b4.Te6edf3sendTb4b4b4(Ta5d6ff"Ta5d6ff{Ta5d6ff\"Ta5d6fftypeTa5d6ff\"Ta5d6ff:Ta5d6ff\"Ta5d6ffattachTa5d6ff\"Ta5d6ff}Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonMessageTb4b4b4(Te6edf3WebSocket Te6edf3wTb4b4b4, Te6edf3String Te6edf3tTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3t Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3JSONObject Te6edf3o Tff7b72= Tff7b72new Te6edf3JSONObjectTb4b4b4(Te6edf3tTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3oTb4b4b4.Te6edf3optStringTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3String Te6edf3msg Tff7b72= Te6edf3oTb4b4b4.Te6edf3optStringTb4b4b4(Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3msgTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffWeb audio is disabledTa5d6ff"Tb4b4b4)
Tff7b72|Tff7b72| Tb4b4b4(Te6edf3msgTb4b4b4.Te6edf3equalsTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4) Tff7b72&Tff7b72& Te6edf3oTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4) Tff7b72< T79c0ff2Tb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// keep generic
Tb4b4b4}
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffserverTa5d6ff"Tb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Ta5d6ff"Ta5d6ffweb_audio.readyTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3oTb4b4b4.Te6edf3optStringTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Te6edf3TelephoneNativeAudioSessionTb4b4b4.Te6edf3thisTb4b4b4:Tb4b4b4:Te6edf3onWebAudioReadyPipelinesTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3tTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffweb_audio.readyTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72| Te6edf3tTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffframe_msTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Te6edf3TelephoneNativeAudioSessionTb4b4b4.Te6edf3thisTb4b4b4:Tb4b4b4:Te6edf3onWebAudioReadyPipelinesTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonMessageTb4b4b4(Te6edf3WebSocket Te6edf3wTb4b4b4, Te6edf3ByteString Te6edf3bytesTb4b4b4) Tb4b4b4{
Te6edf3playPcmTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonFailureTb4b4b4(Te6edf3WebSocket Te6edf3wTb4b4b4, Te6edf3Throwable Te6edf3tTb4b4b4, Tf0883e@Nullable Te6edf3Response Te6edf3rTb4b4b4) Tb4b4b4{
Te6edf3webSocket Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3runningTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3pipelinesReadyTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3msg Tff7b72= Te6edf3t Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3tTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72null Tff7b72? Te6edf3tTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ffconnect_failedTa5d6ff"Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwebsocketTa5d6ff"Tb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4;
Te6edf3postReleaseAfterStopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonClosedTb4b4b4(Te6edf3WebSocket Te6edf3wTb4b4b4, Tffa657int Te6edf3cTb4b4b4, Tf0883e@Nullable Te6edf3String Te6edf3rTb4b4b4) Tb4b4b4{
Te6edf3webSocket Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3runningTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3pipelinesReadyTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3postReleaseAfterStopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3runningTb4b4b4.Te6edf3setTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3m Tff7b72= Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72null Tff7b72? Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ffokhttpTa5d6ff"Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffconnectTa5d6ff"Tb4b4b4, Te6edf3mTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffonWebAudioReadyPipelinesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pipelinesReadyTb4b4b4.Te6edf3getAndSetTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3runningTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3appContextTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4) Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffno_record_audio_permissionTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3acquireCallAudioModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3inBuf Tff7b72= Te6edf3MathTb4b4b4.Te6edf3maxTb4b4b4(
Te6edf3AudioRecordTb4b4b4.Te6edf3getMinBufferSizeTb4b4b4(Te6edf3SAMPLE_RATETb4b4b4, Te6edf3IN_CHANNELTb4b4b4, Te6edf3FORMATTb4b4b4)Tb4b4b4,
T79c0ff4096
Tb4b4b4)Tb4b4b4;
Te6edf3audioRecord Tff7b72= Te6edf3createVoiceAudioRecordTb4b4b4(Te6edf3inBufTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3audioRecord Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffno_record_audio_permissionTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3audioRecordTb4b4b4.Te6edf3getStateTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Te6edf3AudioRecordTb4b4b4.Te6edf3STATE_INITIALIZEDTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrecord_initTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3outMin Tff7b72= Te6edf3AudioTrackTb4b4b4.Te6edf3getMinBufferSizeTb4b4b4(Te6edf3SAMPLE_RATETb4b4b4, Te6edf3OUT_CHANNELTb4b4b4, Te6edf3FORMATTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3outMin Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3outMin Tff7b72= T79c0ff4096Tb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3trackBuf Tff7b72= Te6edf3MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3outMin Tff7b72* T79c0ff2Tb4b4b4, Te6edf3outMinTb4b4b4)Tb4b4b4;
Te6edf3AudioAttributes Te6edf3playbackAttr Tff7b72= Tff7b72new Te6edf3AudioAttributesTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setUsageTb4b4b4(Te6edf3AudioAttributesTb4b4b4.Te6edf3USAGE_VOICE_COMMUNICATIONTb4b4b4)
Tb4b4b4.Te6edf3setContentTypeTb4b4b4(Te6edf3AudioAttributesTb4b4b4.Te6edf3CONTENT_TYPE_SPEECHTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3AudioFormat Te6edf3trackFmt Tff7b72= Tff7b72new Te6edf3AudioFormatTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setSampleRateTb4b4b4(Te6edf3SAMPLE_RATETb4b4b4)
Tb4b4b4.Te6edf3setEncodingTb4b4b4(Te6edf3FORMATTb4b4b4)
Tb4b4b4.Te6edf3setChannelMaskTb4b4b4(Te6edf3OUT_CHANNELTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3audioTrack Tff7b72= Tff7b72new Te6edf3AudioTrackTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setAudioAttributesTb4b4b4(Te6edf3playbackAttrTb4b4b4)
Tb4b4b4.Te6edf3setAudioFormatTb4b4b4(Te6edf3trackFmtTb4b4b4)
Tb4b4b4.Te6edf3setBufferSizeInBytesTb4b4b4(Te6edf3trackBufTb4b4b4)
Tb4b4b4.Te6edf3setTransferModeTb4b4b4(Te6edf3AudioTrackTb4b4b4.Te6edf3MODE_STREAMTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3audioTrackTb4b4b4.Te6edf3getStateTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Te6edf3AudioTrackTb4b4b4.Te6edf3STATE_INITIALIZEDTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftrack_initTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3LOLLIPOPTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3audioTrackTb4b4b4.Te6edf3setVolumeTb4b4b4(Te6edf3AudioTrackTb4b4b4.Te6edf3getMaxVolumeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioRecordTb4b4b4.Te6edf3startRecordingTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrecord_startTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72null Tff7b72? Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioTrackTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftrack_startTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72null Tff7b72? Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3sendThread Tff7b72= Tff7b72new Te6edf3ThreadTb4b4b4(Tff7b72thisTb4b4b4:Tb4b4b4:Te6edf3drainMicrophoneTb4b4b4, Ta5d6ff"Ta5d6ffmeshchatx-tel-micTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3sendThreadTb4b4b4.Te6edf3setPriorityTb4b4b4(Te6edf3ThreadTb4b4b4.Te6edf3NORM_PRIORITYTb4b4b4)Tb4b4b4;
Te6edf3sendThreadTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6ffreadyTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3postDispatchTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsetupTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72null Tff7b72? Te6edf3eTb4b4b4.Te6edf3getMessageTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ffsetupTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tf0883e@Nullable
Tff7b72private Te6edf3AudioRecord Td2a8ffcreateVoiceAudioRecordTb4b4b4(Tffa657int Te6edf3inBufTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3appContextTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4) Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72new Te6edf3AudioRecordTb4b4b4(
Te6edf3MediaRecorderTb4b4b4.Te6edf3AudioSourceTb4b4b4.Te6edf3VOICE_COMMUNICATIONTb4b4b4,
Te6edf3SAMPLE_RATETb4b4b4,
Te6edf3IN_CHANNELTb4b4b4,
Te6edf3FORMATTb4b4b4,
Te6edf3inBuf Tff7b72* T79c0ff2
Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffdrainMicrophoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657byteTff7b72[Tff7b72] Te6edf3buf Tff7b72= Tff7b72new Tffa657byteTff7b72[T79c0ff4096Tff7b72]Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3runningTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3webSocket Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3AudioRecord Te6edf3arTb4b4b4;
Te6edf3WebSocket Te6edf3wTb4b4b4;
Tff7b72synchronized Tb4b4b4(Tff7b72thisTb4b4b4) Tb4b4b4{
Te6edf3ar Tff7b72= Te6edf3audioRecordTb4b4b4;
Te6edf3w Tff7b72= Te6edf3webSocketTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3ar Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3w Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3nTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3n Tff7b72= Te6edf3arTb4b4b4.Te6edf3readTb4b4b4(Te6edf3bufTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3bufTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3n Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Te6edf3w Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3wTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3ByteStringTb4b4b4.Te6edf3ofTb4b4b4(Te6edf3bufTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3n Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffplayPcmTb4b4b4(Te6edf3ByteString Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3bytes Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3bytesTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3AudioTrack Te6edf3atTb4b4b4;
Tff7b72synchronized Tb4b4b4(Tff7b72thisTb4b4b4) Tb4b4b4{
Te6edf3at Tff7b72= Te6edf3audioTrackTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3at Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657byteTff7b72[Tff7b72] Te6edf3raw Tff7b72= Te6edf3bytesTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3off Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3left Tff7b72= Te6edf3rawTb4b4b4.Te6edf3lengthTb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3left Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3runningTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72synchronized Tb4b4b4(Tff7b72thisTb4b4b4) Tb4b4b4{
Te6edf3at Tff7b72= Te6edf3audioTrackTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3at Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3written Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3written Tff7b72= Te6edf3atTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3rawTb4b4b4, Te6edf3offTb4b4b4, Te6edf3leftTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3written Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3written Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3ThreadTb4b4b4.Te6edf3yieldTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72continueTb4b4b4;
Tb4b4b4}
Te6edf3off Tff7b72+Tff7b72= Te6edf3writtenTb4b4b4;
Te6edf3left Tff7b72-Tff7b72= Te6edf3writtenTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffpostDispatchTb4b4b4(Te6edf3String Te6edf3aTb4b4b4, Tf0883e@Nullable Te6edf3String Te6edf3bTb4b4b4, Tf0883e@Nullable Te6edf3String Te6edf3cTb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Te6edf3dispatchToPageTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4, Te6edf3cTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffdispatchToPageTb4b4b4(Te6edf3String Te6edf3kindTb4b4b4, Tf0883e@Nullable Te6edf3String Te6edf3subTb4b4b4, Tf0883e@Nullable Te6edf3String Te6edf3detailTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3WebView Te6edf3wv Tff7b72= Te6edf3activityTb4b4b4.Te6edf3getWebViewForNativeBridgeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wv Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3JSONObject Te6edf3o Tff7b72= Tff7b72new Te6edf3JSONObjectTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3oTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmeshchatx-native-telephone-audioTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3oTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6ffkindTa5d6ff"Tb4b4b4, Te6edf3kindTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sub Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3oTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6ffsubTa5d6ff"Tb4b4b4, Te6edf3subTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3detail Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3oTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff"Ta5d6ffdetailTa5d6ff"Tb4b4b4, Te6edf3detailTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3String Te6edf3j Tff7b72= Te6edf3oTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wvTb4b4b4.Te6edf3evaluateJavascriptTb4b4b4(
Ta5d6ff"Ta5d6fftry{var d=Ta5d6ff" Tff7b72+ Te6edf3j Tff7b72+ Ta5d6ff"Ta5d6ff;Ta5d6ff"
Tff7b72+ Ta5d6ff"Ta5d6ffwindow.dispatchEvent(new CustomEvent('meshchatx-native-telephone-audio',{detail:d}));}catch(e){}Ta5d6ff"Tb4b4b4,
Tff7b72null
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffacquireCallAudioModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3releaseCallAudioModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3audioManager Tff7b72= Tb4b4b4(Te6edf3AudioManagerTb4b4b4) Te6edf3appContextTb4b4b4.Te6edf3getSystemServiceTb4b4b4(Te6edf3ContextTb4b4b4.Te6edf3AUDIO_SERVICETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3audioManager Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioManagerTb4b4b4.Te6edf3setModeTb4b4b4(Te6edf3AudioManagerTb4b4b4.Te6edf3MODE_IN_COMMUNICATIONTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3OTb4b4b4) Tb4b4b4{
Te6edf3AudioAttributes Te6edf3aa Tff7b72= Tff7b72new Te6edf3AudioAttributesTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setUsageTb4b4b4(Te6edf3AudioAttributesTb4b4b4.Te6edf3USAGE_VOICE_COMMUNICATIONTb4b4b4)
Tb4b4b4.Te6edf3setContentTypeTb4b4b4(Te6edf3AudioAttributesTb4b4b4.Te6edf3CONTENT_TYPE_SPEECHTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3audioFocusRequest Tff7b72= Tff7b72new Te6edf3AudioFocusRequestTb4b4b4.Te6edf3BuilderTb4b4b4(Te6edf3AudioManagerTb4b4b4.Te6edf3AUDIOFOCUS_GAIN_TRANSIENTTb4b4b4)
Tb4b4b4.Te6edf3setAudioAttributesTb4b4b4(Te6edf3aaTb4b4b4)
Tb4b4b4.Te6edf3setAcceptsDelayedFocusGainTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3audioManagerTb4b4b4.Te6edf3requestAudioFocusTb4b4b4(Te6edf3audioFocusRequestTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3audioManagerTb4b4b4.Te6edf3requestAudioFocusTb4b4b4(
Te6edf3audioFocusListenerTb4b4b4,
Te6edf3AudioManagerTb4b4b4.Te6edf3STREAM_VOICE_CALLTb4b4b4,
Te6edf3AudioManagerTb4b4b4.Te6edf3AUDIOFOCUS_GAIN_TRANSIENT
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffreleaseCallAudioModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3audioManager Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3O Tff7b72&Tff7b72& Te6edf3audioFocusRequest Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3audioManagerTb4b4b4.Te6edf3abandonAudioFocusRequestTb4b4b4(Te6edf3audioFocusRequestTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3audioManagerTb4b4b4.Te6edf3abandonAudioFocusTb4b4b4(Te6edf3audioFocusListenerTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioManagerTb4b4b4.Te6edf3setModeTb4b4b4(Te6edf3AudioManagerTb4b4b4.Te6edf3MODE_NORMALTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3audioFocusRequest Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3audioManager Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffreleaseTxTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3audioRecord Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3audioRecordTb4b4b4.Te6edf3getRecordingStateTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3AudioRecordTb4b4b4.Te6edf3RECORDSTATE_RECORDINGTb4b4b4) Tb4b4b4{
Te6edf3audioRecordTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioRecordTb4b4b4.Te6edf3releaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3audioRecord Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3audioTrack Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3audioTrackTb4b4b4.Te6edf3getPlayStateTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3AudioTrackTb4b4b4.Te6edf3PLAYSTATE_PLAYINGTb4b4b4) Tb4b4b4{
Te6edf3audioTrackTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3audioTrackTb4b4b4.Te6edf3releaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Te6edf3audioTrack Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3releaseCallAudioModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657void Td2a8ffreleaseAudioTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3releaseTxTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────